/*
 * xml_string.h
 *
 *  Created on: 2017年5月23日
 *      Author: xfwangqiang
 */

/*========================================================*
 * 程序修改记录：
 * <版本号> <修改日期>, <修改人员>: <修改功能概述>
 *  V1.0.0  2017-06-05  xfwangqiang     创建
 *  V1.0.1  2020-07-24  xfwangqiang     增加了xml_strfind的函数
 *  V1.0.2  2022-03-07 xfwangqiang      增加了xml_inttostr函数
 *      增加了xml_hextostr函数
 *      将xml_getfloatstr函数变更为xml_floattostr函数，增加了最大小数点位数
 *      增加了xml_strreverse函数
 *========================================================*/

#ifndef XML_STRING_H_
#define XML_STRING_H_

#include "xml_typedefs.h"
#include "xml_config.h"

#define forstrloop(str)		for( ;'\0' != *(str); (str)++ )

// return the size of string, don't include '\0'
int xml_strlen( char *src );


// copy string from src to des, return index of copy char
int xml_strcpy( char *des, char *src );


// copy string from src to des, return index of copy char
int xml_strncpy( char *des, char *src, int size );


// copy string from src to des, return index of copy char
int xml_strcat( char *des, char *src );

// reverse copy string from src to des, return index of copy char
int xml_strcatreverse(char *des, char *src);

// copy string from src to des, return index of copy char
int xml_strncat( char *des, char *src, int size );


// search the identifier in string
int xml_searchname( char *string, char *name, int size );

// check the identifier char
int xml_checkidentify( char c );



//============================================================================
// 函数名称：xml_strfind
// 函数功能：搜索字符串中目标字符串的位置
//
// 输入参数： 1 -- 源字符串
//           2 -- offset
//           3 -- 目标字符串
// 返回值：目标字符串的位置
// 说明：搜索字符串中目标字符串的位置
//============================================================================
int xml_strfind(char *string, int offset, char *des);

//============================================================================
// 函数名称：xml_strindexof
// 函数功能：得到字符串索引
//
// 输入参数： 1 -- 字符串
//			2 -- 偏移
//			3 -- 字符
// 输出参数：
// 返回值：目标字符的索引值
// 说明：得到字符串索引
//============================================================================
int xml_strindexof( char *string, int offset, char c );


//============================================================================
// 函数名称：xml_strsplitlist
// 函数功能：使用特定字符分割字符得到字符串列表中指定的字符
//
// 输入参数： 1 -- 字符串
// 			2 -- 目标字符
//			3 -- 字符串列表的索引
// 输出参数： 4 -- 得到的字符串
// 返回值：得到字符串的长度
// 说明：使用特定字符分割字符得到字符串列表中指定的字符
//============================================================================
int xml_strsplitlist( char *string, char c, int index, char *buffer );


//============================================================================
// 函数名称：xml_strsplit
// 函数功能：使用特定字符分割字符得到字符串列表中元素个数
//
// 输入参数： 1 -- 字符串
// 			2 -- 目标字符
// 输出参数：
// 返回值：得到字符串列表中元素个数
// 说明：使用特定字符分割字符得到字符串列表中元素个数
//============================================================================
int xml_strsplit( char *string, char c );


//============================================================================
// 函数名称：xml_strtrim
// 函数功能：去掉首尾的空格
//
// 输入参数： 1 -- 去年空格前的字符串
// 输出参数： 2 -- 去掉空格后的字符串
// 返回值：去掉后字符串的长度
// 说明：去掉首尾的空格
//============================================================================
int  xml_strtrim( char *string, char *buffer );



//============================================================================
// 函数名称：xml_strnew
// 函数功能：新建一个字符串
//
// 输入参数： 1 -- 源字符串
// 返回值：新建字符串的地址
// 说明：在堆中开辟一块同样大小的内存块，将源字符串的内容拷备到新的字符串里，返回新的字符串地址，
// 使用完毕后一定要记得释放，否则会发生内存泄漏.
//============================================================================
char *xml_strnew( char *string );




//============================================================================
// 函数名称：xml_strcmp
// 函数功能：字符串比较
//
// 输入参数： 1 -- 源字符串1
//			  2 -- 源字符串2
// 返回值：0 -- 相等
// 说明：
//============================================================================
int xml_strcmp( char *str1, char *str2 );



//============================================================================
// 函数名称：xml_strreverse
// 函数功能：字符串前后倒换
//
// 输入参数： 1 -- 源字符串1
// 返回值：0 -- 字符串长度
// 说明：
//============================================================================
int xml_strreverse(char *str);


//============================================================================
// 函数名称：xml_isint
// 函数功能：判断字符串是否为整型
//
// 输入参数： 1 -- 字符串
// 返回值：0 -- 不是 1 -- 是
// 说明：判断字符串是否为整型
//============================================================================
int xml_isint(char *strvalue);


//============================================================================
// 函数名称：xml_ishex
// 函数功能：判断字符串是否为16进制整型
//
// 输入参数： 1 -- 字符串
// 返回值：0 -- 不是 1 -- 是
// 说明：判断字符串是否为16进制整型
//============================================================================
int xml_ishex( char *strvalue );


//============================================================================
// 函数名称：xml_isfloat
// 函数功能：判断字符串是否为浮点型
//
// 输入参数： 1 -- 字符串
// 返回值：0 -- 不是 1 -- 是
// 说明：判断字符串是否为浮点型
//============================================================================
int xml_isfloat(char *strvalue);


//============================================================================
// 函数名称：xml_inttostr
// 函数功能：将整型数值以十进制转换成字符串
//
// 输入参数： 1 -- 数值
//           2 -- buffer
//           3 -- buffer的长度
// 返回值：数值长度
// 说明：将整型数值以十进制转换成字符串，例如value = 100, buffer = "100"
//============================================================================
int xml_inttostr(int value, char *buffer, int size);

//============================================================================
// 函数名称：xml_strtoint
// 函数功能：将字符串转换为整型
//
// 输入参数： 1 -- 字符串
// 返回值：整形值
// 说明：将字符串转换为整型
//============================================================================
int xml_strtoint(char *strvalue);


//============================================================================
// 函数名称：xml_hextostr
// 函数功能：将整型数值以十六进制转换成字符串
//
// 输入参数： 1 -- 数值
//           2 -- buffer
//           3 -- buffer的长度
// 返回值：数值长度
// 说明：将整型数值以十Uy进制转换成字符串，例如value = 0x100, buffer = "0x100"
//============================================================================
int xml_hextostr(int value, char *buffer, int size);

//============================================================================
// 函数名称：xml_strtohex
// 函数功能：将字符串转换为整型
//
// 输入参数： 1 -- 字符串
// 返回值：整形值
// 说明：将字符串转换为整型
//============================================================================
int xml_strtohex( char *strvalue );

//============================================================================
// 函数名称：xml_strtofloat
// 函数功能：将字符串转换为浮点型
//
// 输入参数： 1 -- 字符串
// 返回值：浮点值
// 说明：将字符串转换为浮点型
//============================================================================
float xml_strtofloat(char *strvalue);

//============================================================================
// 函数名称：xml_floattostr
// 函数功能：将浮点数转为字符串
//
// 输入参数： 1 -- 浮点值
//           2 -- 小数点后保留位
//			 3 -- 字符串buffer
//           4 -- 字符串buffer长度
// 返回值：字符串长度
// 说明：将浮点数转为字符串
//============================================================================
int xml_floattostr(float value , int point, char *buffer, int size);

//============================================================================
// 函数名称：xml_tolower
// 函数功能：将字符转换为小写
//
// 输入参数： 1 -- 字符串
// 返回值：小写字符
// 说明：将字符转换为小写
//============================================================================
int xml_tolower(int c);

//============================================================================
// 函数名称：xml_isdigit
// 函数功能：将字符是否为数字
//
// 输入参数： 1 -- 字符串
// 返回值：小写字符
// 说明：将字符转换为小写
//============================================================================
int xml_isdigit(int ch);

#endif /* XML_STRING_H_ */
